Centos7安装keepalived(自定义路径安装) 您所在的位置:网站首页 yum install 指定安装路径 Centos7安装keepalived(自定义路径安装)

Centos7安装keepalived(自定义路径安装)

2023-10-08 16:09| 来源: 网络整理| 查看: 265

0、Keepalived介绍  Keepalived是一个基于VRRP协议来实现的服务高可用方案,可以利用其来避免IP单点故障,类似的工具还有heartbeat、corosync、pacemaker。但是它一般不会单独出现,而是与其它负载均衡技术(如lvs、haproxy、nginx)一起工作来达到集群的高可用。   Keepalived的作用是检测服务器的状态,如果有一台web服务器死机,或工作出现故障,Keepalived将检测到,并将有故障的服务器从系统中剔除,同时使用其他服务器代替该服务器的工作;当服务器工作正常后Keepalived自动将服务器加入到服务器群中,这些工作全部自动完成,不需要人工干涉,需要人工做的只是修复故障的服务器。

  健康检查和失败切换是keepalived的两大核心功能。 所谓的健康检查, 就是采用tcp三次握手, icmp请求, http请求, udp echo请求等方式对负载均衡器后面的实际的服务器(通常是承载真实业务的服务器)进行保活;而失败切换主要是应用于配置了主备模式的负载均衡器, 利用VRRP(虚拟路由冗余协议, 可参考RFC文档http://tools.ietf.org/html/rfc5798) 维持主备负载均衡器的心跳, 当主负载均衡器出现问题时, 由备负载均衡器承载对应的业务, 从而在最大限度上减少流量损失, 并提供服务的稳定性。

      Keepalived是一个免费开源的,用C编写的类似于layer3, 4 & 7交换机制软件,具备我们平时说的第3层、第4层和第7层交换机的功能。主要提供loadbalancing(负载均衡)和 high-availability(高可用)功能,负载均衡实现需要依赖Linux的虚拟服务内核模块(ipvs),而高可用是通过VRRP协议实现多台机器之间的故障转移服务。

上图是Keepalived的功能体系结构,大致分两层:用户空间(user space)和内核空间(kernel space)。 内核空间:主要包括IPVS(IP虚拟服务器,用于实现网络服务的负载均衡)和NETLINK(提供高级路由及其他相关的网络功能)两个部份。 用户空间:

WatchDog:负载监控checkers和VRRP进程的状况 VRRP Stack:负载负载均衡器之间的失败切换FailOver,如果只用一个负载均稀器,则VRRP不是必须的。 Checkers:负责真实服务器的健康检查healthchecking,是keepalived最主要的功能。换言之,可以没有VRRP Stack,但健康检查healthchecking是一定要有的。 IPVS wrapper:用户发送设定的规则到内核ipvs代码 Netlink Reflector:用来设定vrrp的vip地址等。 Keepalived的所有功能是配置keepalived.conf文件来实现的。

 

1、VRRP协议  VRRP全称 Virtual Router Redundancy Protocol,即 虚拟路由冗余协议。可以认为它是实现路由器高可用的容错协议,即将N台提供相同功能的路由器组成一个路由器组(Router Group),这个组里面有一个master和多个backup,但在外界看来就像一台一样,构成虚拟路由器,拥有一个虚拟IP(vip,也就是路由器所在局域网内其他机器的默认路由),占有这个IP的master实际负责ARP相应和转发IP数据包,组中的其它路由器作为备份的角色处于待命状态。master会发组播消息,当backup在超时时间内收不到vrrp包时就认为master宕掉了,这时就需要根据VRRP的优先级来选举一个backup当master,保证路由器的高可用。

  在VRRP协议实现里,虚拟路由器使用 00-00-5E-00-01-XX 作为虚拟MAC地址,XX就是唯一的 VRID (Virtual Router IDentifier),这个地址同一时间只有一个物理路由器占用。在虚拟路由器里面的物理路由器组里面通过多播IP地址 224.0.0.18 来定时发送通告消息。每个Router都有一个 1-255 之间的优先级别,级别最高的(highest priority)将成为主控(master)路由器。通过降低master的优先权可以让处于backup状态的路由器抢占(pro-empt)主路由器的状态,两个backup优先级相同的IP地址较大者为master,接管虚拟IP。

 

 

 

2、与heartbeat/corosync等比较  Heartbeat、Corosync、Keepalived这三个集群组件我们到底选哪个好,首先我想说明的是,Heartbeat、Corosync是属于同一类型,Keepalived与Heartbeat、Corosync,根本不是同一类型的。Keepalived使用的vrrp协议方式,虚拟路由冗余协议 (Virtual Router Redundancy Protocol,简称VRRP);Heartbeat或Corosync是基于主机或网络服务的高可用方式;简单的说就是,Keepalived的目的是模拟路由器的高可用,Heartbeat或Corosync的目的是实现Service的高可用。

  所以一般Keepalived是实现前端高可用,常用的前端高可用的组合有,就是我们常见的LVS+Keepalived、Nginx+Keepalived、HAproxy+Keepalived。而Heartbeat或Corosync是实现服务的高可用,常见的组合有Heartbeat v3(Corosync)+Pacemaker+NFS+Httpd 实现Web服务器的高可用、Heartbeat v3(Corosync)+Pacemaker+NFS+MySQL 实现MySQL服务器的高可用。总结一下,Keepalived中实现轻量级的高可用,一般用于前端高可用,且不需要共享存储,一般常用于两个节点的高可用。而Heartbeat(或Corosync)一般用于服务的高可用,且需要共享存储,一般用于多节点的高可用。这个问题我们说明白了。

  又有博友会问了,那heartbaet与corosync我们又应该选择哪个好啊,我想说我们一般用corosync,因为corosync的运行机制更优于heartbeat,就连从heartbeat分离出来的pacemaker都说在以后的开发当中更倾向于corosync,所以现在corosync+pacemaker是最佳组合。

3、Keepalived + nginx  keepalived可以认为是VRRP协议在Linux上的实现,主要有三个模块,分别是core、check和vrrp。core模块为keepalived的核心,负责主进程的启动、维护以及全局配置文件的加载和解析。check负责健康检查,包括常见的各种检查方式。vrrp模块是来实现VRRP协议的。

 

 

一、安装1、首先安装依赖包

查看系统版本cat /etc/redhat-release CentOS Linux release 7.2.1511 (Core)

查看内核版本

ls /usr/src/kernels3.10.0-693.2.2.el7.x86_64

[root@bogon /]# yum install -y libnl*[root@bogon /]# yum install -y libnfnetlink-devel zlib zlib-devel gcc gcc-c++ openssl openssl-devel openssh

pcre: 用来作地址重写的功能。zlib:nginx 的gzip模块,传输数据打包,省流量(但消耗资源)。openssl:提供ssl加密协议

2、下载并解压Keepalived[root@bogon src]# pwd/usr/local/src[root@bogon src]# wget http://www.keepalived.org/software/keepalived-1.3.5.tar.gz[root@bogon src]# tar xvf keepalived-1.3.5.tar.gz

3、编译安装[root@bogon src]# cd keepalived-1.3.5[root@bogon keepalived-1.3.5]# ./configure --prefix=/usr/local/keepalived[root@bogon keepalived-1.3.5]# make[root@bogon keepalived-1.3.5]# make install

二、配置keepalived安装完成后默认不会注册为系统服务,所以需要手工添加系统服务脚本。在/etc/init.d目录下新建keepalived文件,并更改权限其即可。

0、创建keepalived的pid目录

  用于后面手动添加进程号

[root@Nginx-Master ~]# mkdir -p /usr/local/keepalived/var/run/

[root@Nginx-Master ~]# vi /usr/local/keepalived/var/run/keepalived.pid 

  建立Nginx用户

[root@Nginx-Master nginx-1.9.7]# groupadd -g 1001 nginx [root@Nginx-Master nginx-1.9.7]# useradd -u 900 nginx -g nginx -s /sbin/nologin [root@Nginx-Master nginx-1.9.7]# tail -1 /etc/passwd nginx:x:900:1001::/home/nginx:/sbin/nologin

1、去 keepalived 源码目录下拷贝启动脚本到/etc/init.d/下[root@bogon keepalived-1.3.5]# pwd/usr/local/src/keepalived-1.3.5[root@bogon keepalived-1.3.5]# cp /usr/local/src/keepalived-1.3.5/keepalived/etc/init.d/keepalived    /etc/init.d/keepalived[root@bogon keepalived-1.3.5]# ll /etc/init.d/ | grep keepalived-rwxr-xr-x 1 root root 1308 8月 2 14:15 keepalived

2、修改/etc/init.d/keepalived启动脚本  方式1、需要修改的数据有以下几项:

# config: /etc/keepalived/keepalived.conf 文件的位置;# Source configuration file (we set KEEPALIVED_OPTIONS there) 文件的位置。. /etc/sysconfig/keepalived修改为实际安装的文件路径,我的安装路径如下:

# config: /usr/local/keepalived/etc/keepalived/keepalived.conf. /usr/local/keepalived/etc/sysconfig/keepalived另外添加如下变量,并修改文件中相应的部分:

keepalived=/usr/local/keepalived/sbin/keepalivedkeepalived_config=/usr/local/keepalived/etc/keepalived/keepalived.confkeepalived_pid=/usr/local/keepalived/var/run/keepalived.pid[root@bogon keepalived-1.3.5]# vim /etc/init.d/keepalived#!/bin/sh## Startup script for the Keepalived daemon## processname: keepalived# pidfile: /usr/local/keepalived/run/keepalived.pid# config: /usr/local/keepalived/etc/keepalived/keepalived.conf# chkconfig: - 21 79# description: Start and stop Keepalived

# Source function library. /etc/rc.d/init.d/functions

# Source configuration file (we set KEEPALIVED_OPTIONS there). /usr/local/keepalived/etc/sysconfig/keepalived

keepalived=/usr/local/keepalived/sbin/keepalivedkeepalived_config=/usr/local/keepalived/etc/keepalived/keepalived.confkeepalived_pid=/usr/local/keepalived/var/run/keepalived.pid

RETVAL=0

prog="keepalived"

start() { echo -n $"Starting $prog: " daemon $keepalived -f ${keepalived_config} ${KEEPALIVED_OPTIONS} RETVAL=$? echo [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog}

2、修改其权限并开机启动

修改权限:chmod 755  /etc/init.d/keepalived加为系统服务:chkconfig  --add keepalived开机启动:chkconfig keepalived on  (centos6.0)查看开机启动的服务:chkconfig  --list

3、备注:keepalived服务控制systemctl enable keepalived.service #设置开机自动启动  (centos7.0)systemctl disable keepalived.service #取消开机自动启动systemctl start keepalived.service #启动服务systemctl restart keepalived.service #重启服务systemctl stop keepalived.service #停止服务systemctl status keepalived.service #查看服务状态

  方式2、另一种添加为系统服务的方式1、复制相应文件到相应目录下# keepalived启动脚本变量引用文件,默认文件路径是/etc/sysconfig/,也可以不做软链接,直接修改启动脚本中文件路径即可(安装目录下)[root@bogon /]# cp /usr/local/keepalived/etc/sysconfig/keepalived      /etc/sysconfig/keepalived

# 将keepalived主程序加入到环境变量(安装目录下)[root@bogon /]# cp /usr/local/keepalived/sbin/keepalived      /usr/sbin/keepalived

# keepalived启动脚本(源码目录下),放到/etc/init.d/目录下就可以使用service命令便捷调用[root@bogon /]# cp /usr/local/src/keepalived-1.3.5/keepalived/etc/init.d/keepalived     /etc/init.d/keepalived

# 将配置文件放到默认路径下[root@bogon /]# mkdir /etc/keepalived[root@bogon /]# cp /usr/local/keepalived/etc/keepalived/keepalived.conf     /etc/keepalived/keepalived.conf

[root@bogon /]# cp /etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf.bak

2、设置开机启动# 设置开机启动[root@bogon /]# chkconfig keepalived on   (centos6.0)

[root@bogon /]# service keepalived start|stop|restart  (centos7.0)

附、安装过程中的问题

0、vrrp无法正常识别物理网卡?

vrrp_instance VI_1 { state MASTER interface ens160    #需根据不同的系统进行修改,默认是eth0 virtual_router_id 51 mcast_src_ip 192.168.2.146 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { # 192.168.200.16 #192.168.200.17 # 192.168.200.18 192.168.2.147

}

1、修改启动脚本 /etc/init.d/keepalived 后,未生效?对于此问题一般的解决方法是执行如下命令,重新加载脚本。

[root@bogon sbin]# systemctl daemon-reload

以上方法大多时候会生效,但也有例外。此时,可以试试如下方法:

删除路径 /usr/lib/systemd/system/ 下相应的启动脚本

[root@bogon /]# chkconfig --del keepalived[root@bogon /]# cd /usr/lib/systemd/system/[root@bogon system]# ls | grep keepalivedkeepalived.service[root@bogon system]# rm keepalived.servicerm:是否删除普通文件 "keepalived.service"?y

然后重新注册为系统服务:

[root@bogon system]# chkconfig --add keepalived

重新注册后,修改后的配置文件就会生效。

 

2、a configured resource limit was exceeded?执行 systemctl start keepalived.service 后出现如下错误:

[root@bogon sbin]# systemctl start keepalived.service

Job for keepalived.service failed because a configured resource limit was exceeded. See "systemctl status keepalived.service" and "journalctl -xe" for details.这个问题在网上找了半天也没找可以解决的方法,但是把 问题1 解决之后 问题2 就没再出现

 

3、安装时出现如下问题?

缺少依赖包,安装一下就好:

[root@bogon /]# yum install -y libnfnetlink-devel

4、Failed to start LVS and VRRP High Availability Monitor?

处理方法:需要将进程号手动写入pid文件

处理步骤:查看keepalived的进程

[root@rbtnode1 ~]# ps aux | grep keepalived root 10960 0.0 0.0 48028 1044 ? Ss 09:01 0:00 /usr/local/keepalived/sbin/keepalived -Droot 10961 0.0 0.1 48028 1920 ? S 09:01 0:00 /usr/local/keepalived/sbin/keepalived -Droot 10962 0.0 0.0 48028 1516 ? S 09:01 0:00 /usr/local/keepalived/sbin/keepalived -Droot 19427 0.0 0.0 112664 972 pts/0 S+ 10:06 0:00 grep --color=auto keepalived

将进程号手动写入pid文件

[root@rbtnode1 ~]# echo 10960 >> /usr/local/keepalived/var/run/keepalived.pid

 

5、如果vrrp无法切换,需要关闭防火墙?

systemctl stop firewalld.service #停止firewall

systemctl disable firewalld.service #禁止firewall开机启动

 

6、无法ping通vip地址?

vim /etc/keepalived/keepalived.conf

#vrrp_strict    #在全局配置下面

  

7、centos7.0系统下添加多个虚拟ip地址

 有时你也许想要给一个网卡多个地址。你该怎么做呢?另外买一个网卡来分配地址?在小型网络中其实不用这么做。我们现在可以在CentOS/RHEL 7中给一个网卡分配多个ip地址。想知道怎么做么?好的,跟随我,这并不难。

 首先,让我们找到网卡的IP地址。在我的CentOS 7服务器中,我只使用了一个网卡。

用root特权运行下面的命令:

ip addr

示例输出:

1: lo:  mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s3:  mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:80:63:19 brd ff:ff:ff:ff:ff:ff inet 192.168.1.150/24 brd 192.168.1.255 scope global enp0s3 valid_lft forever preferred_lft forever

如上所见,我的网卡名是enp0s3,ip地址是192.168.1.150。

如你所知,网卡的配置文件存储在 /etc/sysconfig/network-scripts/ 目录下。每个网卡的详细内容将会以不同的名字存储,比如ifcfg-enp0s3。

让我们看下ifcfg-enp0s3的细节。

cat /etc/sysconfig/network-scripts/ifcfg-enp0s3

示例输出:

TYPE="Ethernet" BOOTPROTO="none" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" NAME="enp0s3" UUID="e9f9caef-cb9e-4a19-aace-767c6ee6f849" ONBOOT="yes" HWADDR="08:00:27:80:63:19" IPADDR0="192.168.1.150" PREFIX0="24" GATEWAY0="192.168.1.1" DNS1="192.168.1.1" IPV6_PEERDNS="yes" IPV6_PEERROUTES="yes"

好的,现在我们将在相同的子网中分配多个地址了。

编辑文件 /etc/sysconfig/network-scripts/ifcfg-enp0s3:

vi /etc/sysconfig/network-scripts/ifcfg-enp0s3

像下面那样加入额外的IP地址。

TYPE="Ethernet" BOOTPROTO="none" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" NAME="enp0s3" UUID="933cdc9b-b383-4ddd-b219-5a72c69c9cf0" ONBOOT="yes" HWADDR="08:00:27:3F:AB:68" IPADDR0="192.168.1.150" IPADDR1="192.168.1.151" IPADDR2="192.168.1.152" PREFIX0="24" GATEWAY0="192.168.1.1" DNS1="192.168.1.1" IPV6_PEERDNS="yes" IPV6_PEERROUTES="yes"

如你所见,我已经加了两个IP地址:IPADDR1=”192.168.1.151″ & IPADDR2=”192.168.1.152″

类似地,你可以加入更多的ip地址。

最后,保存并退出文件。重启网络服务来使更改生效。

systemctl restart network

现在,让我们检查是否已经加入了ip地址。

ip addr

示例输出:

: lo:  mtu 65536 qdisc noqueue state UNKNOWN link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: enp0s3:  mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 08:00:27:3f:ab:68 brd ff:ff:ff:ff:ff:ff inet 192.168.1.150/24 brd 192.168.1.255 scope global enp0s3 valid_lft forever preferred_lft forever inet 192.168.1.151/24 brd 192.168.1.255 scope global secondary enp0s3 valid_lft forever preferred_lft forever inet 192.168.1.152/24 brd 192.168.1.255 scope global secondary enp0s3 valid_lft forever preferred_lft forever inet6 fe80::a00:27ff:fe3f:ab68/64 scope link valid_lft forever preferred_lft forever

如你所见,单个网卡已经有3个ip地址了。

让我们ping一下新增的IP地址:

ping -c 4 192.168.1.151

示例输出:

PING 192.168.1.151 (192.168.1.151) 56(84) bytes of data. 64 bytes from 192.168.1.151: icmp_seq=1 ttl=64 time=0.048 ms

如果你想要使用不同的子网,你要改变PREFIX0=24成不同的子网,比如 PREFIX3=16。

比如,我想要添加一个A类地址(*比如10.0.0.1)到我的网卡中。

TYPE="Ethernet" BOOTPROTO="none" DEFROUTE="yes" IPV4_FAILURE_FATAL="no" IPV6INIT="yes" IPV6_AUTOCONF="yes" IPV6_DEFROUTE="yes" IPV6_FAILURE_FATAL="no" NAME="enp0s3" UUID="933cdc9b-b383-4ddd-b219-5a72c69c9cf0" ONBOOT="yes" HWADDR="08:00:27:3F:AB:68" IPADDR0="192.168.1.150" IPADDR1="192.168.1.151" IPADDR2="192.168.1.152" IPADDR3="10.0.0.1" PREFIX0="24" PREFIX3=16 GATEWAY0="192.168.1.1" DNS1="192.168.1.1" IPV6_PEERDNS="yes" IPV6_PEERROUTES="yes"

你可以看到我已经添加一个A类地址(10.0.0.1)并且前缀是16。

保存并退出文件。重启网络服务,接着,ping新增的地址:

ping -c 4 10.0.0.1

 

 8、开机后keepalived无法正常启动,因为pid号会变化,导致每次需手动更新如下文件?

[root@rbtnode1 ~]# > /usr/local/keepalived/var/run/keepalived.pid

 

9、关闭nginx进程后,keepalived无法正常切换?

可以改成监控物理接口,监控nginx进程还需修改shell脚本,未完待续!

强制关闭进程建议用如下命令:

ps -ef | grep keepalived

root 3775 1 0 14:05 ? 00:00:00 /usr/local/sbin/keepalived -Droot 3776 3775 0 14:05 ? 00:00:00 /usr/local/sbin/keepalived -Droot 3777 3775 0 14:05 ? 00:00:00 /usr/local/sbin/keepalived -Droot 8257 1269 0 14:41 pts/0 00:00:00 grep --color=auto keepalived

kill -s 9  3775

 

 

 

 

 

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有